package ejemplos.semaforo.consumidorProductor;

import semaforo.Semaforo;
import semaforo.SemaforoImpl;

/**
 * Muestra el comportamiento de las entidades Consumidor y Productor cuando hay
 * que producir y luego consumir 50 productos y solo tienen una cinta donde
 * entran 20.
 */
public class ConsumidorProductor {

	public static void main(String[] args) {
		final int filaDeProduccion = 20;

		Consumidor consumidor = new Consumidor();
		Productor productor = new Productor();

		// Estas variables son compartidas por los Threads.
		Semaforo exclusivo = new SemaforoImpl(1);
		Semaforo libre = new SemaforoImpl(filaDeProduccion);
		Semaforo ocupado = new SemaforoImpl(0);

		// Seteo los parametros de cons/prod
		consumidor.setLibre(libre);
		consumidor.setOcupado(ocupado);
		consumidor.setExclusivo(exclusivo);

		productor.setLibre(libre);
		productor.setOcupado(ocupado);
		productor.setExclusivo(exclusivo);

		consumidor.start();
		productor.start();

	}
}
